// 页面: 工作台-租赁管理-合同
const $app = getApp()
Page({
  data: {
    Auth: {}, // 权限数据(勿删)
    userInfo: $app.userInfo || {}, // 用户信息
    // ===== 参数 =====
    param: {
      keywords: null, // 搜索条件
      createDepart: '', // 发起部门id
      completeType: '0', // 执行状态 0:待执行/1:执行中/2:已到期/3:已结束
      pageNo: 1, // 第几页
      pageSize: 10 // 一页几条数据
    },
    // ========== 数据相关 ==========
    data: [], // 消息数据
    total: 0, // 数据总数
    refreshing: false, // 是否正在刷新中
    loading: false, // 是否正在加载中
    backTop: false, // 滚动条回到顶部(只要改变值就回到顶部)
    // ========== 数据项相关 ==========
    detailData: {}, // 当前选中数据项数据
    fileKeys: ['contractFilePath', 'contractFilePathName'], // 文件数据
    // ===== 列表数据 =====
    listData: {
      completeType: $app.listData.contractStatus, // 执行状态
      agreeNum: [] // 退租内容
    },
    // ===== 判断 =====
    judgeAuth: {},
    // ===== 弹框参数 =====
    dialogShow: null // 显示隐藏
    // ===== end =====
  },
  model (e) { $app.$common_wx.model(e, this) }, // 双向绑定
  // ========== 生命周期: 页面加载 ==========
  onLoad: function (options) {
    this.setData({ userInfo: $app.userInfo })
    // ========== 获取权限数据(勿删) ==========
    const pages = getCurrentPages()
    const path = pages.length ? pages[pages.length - 1].route : null
    $app.$common_base.getAuth(path).then((Auth) => {
      this.setData({ Auth })
      this.judgeAuthEvent() // 判断权限
    })
    // ========== 获取权限数据(勿删) end ==========
    this.getData() // 获取数据
  },
  // ========== 生命周期: 页面初次渲染完成 ==========
  onReady: function () {},
  // ========== 生命周期: 页面显示 ==========
  onShow: function () {},
  // ========== 生命周期: 页面隐藏 ==========
  onHide: function () {},
  // ========== 生命周期: 页面卸载 ==========
  onUnload: function () {},
  // ========== 判断权限 ==========
  judgeAuthEvent () {
    const Auth = this.data.Auth
    const start = Auth.start // 合同执行
    const stop = Auth.stop // 合同中止
    const defer = Auth.defer // 合同延期
    const finish = Auth.finish // 合同结束
    let judgeAuth = {}
    if (start) judgeAuth['0'] = { start }
    if (stop) judgeAuth['1'] = { stop }
    if (defer || finish) judgeAuth['2'] = { defer, finish }
    // console.log('judgeAuth', judgeAuth)
    this.setData({ judgeAuth })
  },
  // ========== 查询 ==========
  search () {
    this.getData() // 获取数据
  },
  // ========== 执行状态改变时 ==========
  completeTypeChange () {
    this.setData({ dialogShow: null }) // 清除弹框显示
    this.getData() // 获取数据
  },
  // ========== 获取数据 ==========
  getData (RAndL) {
    const dataKey = 'data'
    if (!RAndL) {
      $app.$common.openLoading() // 开启加载
      this.setData({ ['param.pageNo']: 1 })
    }
    this.data.param.createDepart = (this.data.userInfo.level === '4') ? this.data.userInfo.departid : ''
    $app.$api.contract.selectContractlist({
      '*': true,
      '/': true,
      ...this.data.param
    }).then(({ data, count }) => {
      console.log('api-列表数据', data, count)
      let newData = data || []
      const total = count || 0
      if (RAndL === 'refresh') { // 刷新
        this.setData({ refreshing: false })
      } else if (RAndL === 'load') { // 加载
        newData = this.data[dataKey].concat(newData)
        this.setData({ loading: false })
      } else {
        this.setData({ backTop: !this.data.backTop })
      }
      this.setData({ [dataKey]: newData, total })
      $app.$common.closeLoading() // 关闭加载
      RAndL && RAndL.includes('back:') && $app.$common.message(RAndL.slice(5))
    }).catch(({ type, res }) => {
      console.log('api-列表数据', type, res)
      let newData = []
      let total = 0
      if (RAndL === 'refresh') { // 刷新
        this.setData({ refreshing: false })
      } else if (RAndL === 'load') { // 加载
        newData = this.data[dataKey]
        total = this.data.total
        const pageNo = this.data.param.pageNo - 1 // 页数
        this.setData({ loading: false, pageNo: pageNo })
      } else {
        this.setData({ backTop: !this.data.backTop })
      }
      this.setData({ [dataKey]: newData, total })
      $app.$common.closeLoading() // 关闭加载
      $app.$common.message('数据获取失败', 'error') // 提示信息
    })
  },
  // ========== 刷新 ==========
  refresh () {
    this.setData({ ['param.pageNo']: 1 })
    this.getData('refresh') // 获取数据
  },
  // ========== 加载 ==========
  load () {
    const dataKey = 'data'
    if (this.data[dataKey].length >= this.data.total) {
      this.setData({ loading: false })
      return
    }
    const pageNo = this.data.param.pageNo + 1
    this.setData({ ['param.pageNo']: pageNo })
    this.getData('load') // 获取数据
  },
  // ========== '详情按钮'点击事件 ==========
  detail (e) {
    const b = e.currentTarget.dataset.item
    const path = '/pages/home_workbench/work_rent_contract-detail/work_rent_contract-detail'
    wx.navigateTo({ url: `${path}?contractNum=${b.contractNum}` })
  },
  // ========== '更多按钮'点击事件 ==========
  more (e) {
    this.setData({ detailData: e.currentTarget.dataset.item }) // 详情数据
    const x = e.detail.x
    const y = e.detail.y
    this.selectComponent("#zjMore").open(x, y)
  },
  // ========== 合同执行 ==========
  start () {
    this.data.fileKeys.forEach(k => { this.data.detailData[k + 'Arr'] = this.data.detailData[k] ? this.data.detailData[k].split(',') : [] })
    this.selectComponent("#zjMore").close() // 关闭'更多组件'
    this.setData({
      dialogShow: 'start', // 打开弹窗
      detailData: this.data.detailData
    })
  },
  startSave () {
    // 1.验证必填项
    const param = this.data.detailData
    const verify = { contractFilePathArr: '正式合同' }
    this.saveVerify(param, verify).then(() => {
      // 2. 上传
      $app.$common.openLoading() // 开启加载
      const other = {
        api: 'contractExecute',
        param,
        successText: '合同执行成功'
      }
      this.selectComponent("#zjFile").upload('contract', 'addWenjianhetong', other)
    })
  },
  // ========== 获取列表数据: 退租审批单 ==========
  getListData_agreeNum () {
    $app.$common.openLoading() // 开启加载
    $app.$api.contract.contractStopSelect({
      assetsNum: this.data.detailData.assetsNum
    }).then(({ data }) => {
      console.log('api-列表数据: 退租审批单', data)
      this.setData({ ['listData.agreeNum']: data || [] })
      $app.$common.closeLoading() // 关闭加载
    }).catch(() => {})
  },
  // ========== 合同中止 ==========
  stop () {
    this.selectComponent("#zjMore").close() // 关闭'更多组件'
    this.getListData_agreeNum() // 获取列表数据: 退租审批单
    this.setData({ dialogShow: 'stop' }) // 打开弹窗
  },
  stopSave () {
    // 1.验证必填项
    const param = this.data.detailData
    const verify = { agreeNumTuizu: '中止单号' }
    this.saveVerify(param, verify).then(() => {
      // 2. 继续保存
      $app.$common.openLoading() // 开启加载
      this.saveAgain({ // 继续保存
        api: 'contractStop',
        param: {...param, agreeNum: this.data.detailData.agreeNumTuizu},
        successText: '合同中止成功'
      })
    })
  },
  // ========== 合同延期-- 结束时间限制 ==========
  dateLimit (e) {
    let endTimeNew = null
    const initStamp = Date.parse(new Date(this.data.detailData.endTime)) // 合同的初始结束时间
    const changeStamp = Date.parse(new Date(this.data.detailData.endTimeNew)) // 当前选择的时间
    const dataStamp = Date.parse(new Date()) // 今天的时间
    if (changeStamp < dataStamp) {
      $app.$common.message('选择时间不能小于当前时间')
    } else if (initStamp < changeStamp) {
      let initTime = this.data.detailData.endTime.split('-')
      let changeTime = this.data.detailData.endTimeNew.split('-')
      if (initTime[2] !== changeTime[2]) { $app.$common.message('系统已修正时间') }
      changeTime[2] = initTime[2] 
      endTimeNew = changeTime.join('-')
    }
    this.setData({ ['detailData.endTimeNew']: endTimeNew })
  },
  // ========== 合同延期 ==========
  defer () {
    this.selectComponent("#zjMore").close() // 关闭'更多组件'
    this.setData({ ['detailData.endTimeNew']: this.data.detailData.endTime })
    this.setData({ dialogShow: 'defer' }) // 打开弹窗
  },
  deferSave () {
    // 1.验证必填项
    const param = this.data.detailData
    const verify = {
      endTimeNew: '截止日期',
      remark: '备注'
    }
    this.saveVerify(param, verify).then(() => {
      // 2. 继续保存
      $app.$common.openLoading() // 开启加载
      this.saveAgain({ // 继续保存
        api: 'contractDelay',
        param: {...param, endTime: this.data.detailData.endTimeNew},
        successText: '合同延期成功'
      })
    })
  },
  // ========== 合同结束 ==========
  finish () {
    this.selectComponent("#zjMore").close() // 关闭'更多组件'
    $app.$common.confirm('over', () => {
      $app.$common.openLoading() // 开启加载
      this.saveAgain({ // 继续保存
        api: 'contractEnd',
        param: this.data.detailData,
        successText: '合同结束成功'
      })
    })
  },
  // ========== 保存验证 ==========
  saveVerify (param, verify) {
    return new Promise((resolve) => {
      param = param || {}
      verify = verify || {}
      for (const k in verify) {
        const val = Array.isArray(param[k]) ? param[k][0] : param[k]
        if (!$app.$common.noNull(val)) {
          $app.$common.message(verify[k] + '不能为空') // 提示信息
          return
        }
      }
      resolve('complete')
    })
  },
  // ========== 上传成功后 ==========
  uploadEnd (e) {
    e = e.detail
    if (e.result === 'fail' || e.result === 'complete') {
      $app.$common.closeLoading() // 关闭加载
      const text = `上传失败${e.failUp}个`
      $app.$common.message(text, 'error')
    } else {
      // $app.$common.closeLoading() // 关闭加载
      let other = e.other || {}
      other.uploadEnd = true
      this.saveAgain(other) // 继续保存
    }
  },
  // ========== 继续保存 ==========
  saveAgain ({ api, param, successText, uploadEnd }) {
    if (uploadEnd) {
      this.data.fileKeys.forEach(k => {
        this.data.detailData[k] = this.data.detailData[k + 'Arr'].join(',')
      })
    }
    // 调用保存接口
    $app.$api.contract[api](param).then(({ data, message, code }) => {
      if (code === 2) {
        // $app.$common.message(message)
        this.getData(`back:${message}`) // 获取数据
      } else {
        console.log('api-保存成功', data)
        this.setData({ dialogShow: null }) // 关闭弹窗
        // $app.$common.closeLoading() // 关闭加载
        $app.$common.message(successText, 'success')
        this.getData() // 获取数据
      }
    }).catch(() => {})
  }
})